from flask import render_template, redirect, url_for, flash, session, request
from functools import wraps

from . import admin
from app.admin.forms import LoginForm
from app.models import Admin


def admin_login_req(f):
    @wraps(f)
    def decorated_function(*args, **kwargs):
        if "admin" in session:
            return redirect(url_for("admin.login", next=request.url))
        return f(*args, **kwargs)

    return decorated_function


@admin.route("/")
@admin_login_req
def index():
    """
    首页
    :return:
    """
    return render_template("admin/index.html")


@admin.route("/login/", methods=["GET", "POST"])
def login():
    """
    登录
    :return:
    """
    form = LoginForm()
    if form.validate_on_submit():
        data = form.data
        admin = Admin.query.filter_by(name=data["account"]).first()
        if not admin.check_pwd(data["pwd"]):
            flash("密码错误！")
            return redirect(url_for("admin.login"))
        session["admin"] = data["account"]
        return redirect(request.args.get("next") or url_for("admin.index"))

    return render_template("admin/login.html", form=form)


@admin.route("/logout/")
@admin_login_req
def logout():
    """
    退出登录
    :return:
    """
    session.pop("admin", None)
    return redirect(url_for("admin.login"))


@admin.route("/pwd/")
@admin_login_req
def pwd():
    """
    密码
    :return:
    """
    return render_template("admin/pwd.html")


@admin.route("/tag/add/")
@admin_login_req
def tag_add():
    """
    添加标签
    :return:
    """
    return render_template("admin/tag_add.html")


@admin.route("/tag/list/")
@admin_login_req
def tag_list():
    """
    标签列表
    :return:
    """
    return render_template("admin/tag_list.html")


@admin.route("/movie/add/")
@admin_login_req
def movie_add():
    """
    电影添加
    :return:
    """
    return render_template("admin/movie_add.html")


@admin.route("/movie/list/")
@admin_login_req
def movie_list():
    """
    电影列表
    :return:
    """
    return render_template("admin/movie_list.html")


@admin.route("/preview/add/")
@admin_login_req
def preview_add():
    """
    预告添加
    :return:
    """
    return render_template("admin/preview_add.html")


@admin.route("/preview/list/")
@admin_login_req
def preview_list():
    """
    预告列表
    :return:
    """
    return render_template("admin/preview_list.html")


@admin.route("/user/add/")
@admin_login_req
def user_view():
    """
    用户
    :return:
    """
    return render_template("admin/user_view.html")


@admin.route("/user/list/")
@admin_login_req
def user_list():
    """
    用户列表
    :return:
    """
    return render_template("admin/user_list.html")


@admin.route("/comment/list/")
@admin_login_req
def comment_list():
    """
    评论列表
    :return:
    """
    return render_template("admin/comment_list.html")


@admin.route("/movie_col/list/")
@admin_login_req
def movie_col_list():
    """
    电影收藏
    :return:
    """
    return render_template("admin/movie_col_list.html")


@admin.route("/op_log/list/")
@admin_login_req
def op_log():
    """
    操作日志
    :return:
    """
    return render_template("admin/op_log.html")


@admin.route("/admin_login_log/list/")
@admin_login_req
def admin_login_log():
    """
    管理员登录日志
    :return:
    """
    return render_template("admin/admin_login_log.html")


@admin.route("/user_login_log/list/")
@admin_login_req
def user_login_log_list():
    """
    用户登录日志
    :return:
    """
    return render_template("admin/user_login_log_list.html")


@admin.route("/role/add/")
@admin_login_req
def role_add():
    """
    添加角色
    :return:
    """
    return render_template("admin/role_add.html")


@admin.route("/role/list/")
@admin_login_req
def role_list():
    """
    角色列表
    :return:
    """
    return render_template("admin/role_list.html")


@admin.route("/auth/add/")
@admin_login_req
def auth_add():
    """
    添加权限
    :return:
    """
    return render_template("admin/auth_add.html")


@admin.route("/auth/list/")
@admin_login_req
def auth_list():
    """
    权限列表
    :return:
    """
    return render_template("admin/auth_list.html")


@admin.route("admin/add")
@admin_login_req
def admin_add():
    """
    添加管理员
    :return:
    """
    return render_template("admin/admin_add.html")


@admin.route("/admin/list/")
@admin_login_req
def admin_list():
    """
    管理员列表
    :return:
    """
    return render_template("admin/admin_list.html")
